<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    /* 
    数组扁平化: 取出嵌套数组(多维)中的所有元素放到一个新数组(一维)中
      如: [1, [3, [2, 4]]]  ==>  [1, 3, 2, 4]

      [1, [2, 3], [4, [5, [6, 7]]]]
    */
    const arr = [1, [2, 3], [4, [5, [6, 7]]]]

    /*
    方法一: 递归 + reduce() + concat()
    */
    function flaten(arr) {
      return arr.reduce((pre, item , index) => {
        // 如果item是一个二及以上的数组, 就得递归处理
        if (Array.isArray(item) && item.some(cItem => Array.isArray(cItem))) {
          return pre.concat(flaten(item))
        } else {
          // 否则直接concat
          return pre.concat(item)
        }
      
      }, []) // [1, 2, 3, 4, [5, [6, 7]]]
    }
    console.log(flaten(arr))

    /*
    方法二: ... + some() + concat()
    [1, [2, 3], [4, [5, [6, 7]]]]
    */
   function flatten2(arr) {

    // [1, [3, [2, 4]]]  ==> [1, 3, [2, 4]]
    //  let result =  [].concat(...arr)

     while (arr.some(item => Array.isArray(item))) {
      arr = [].concat(...arr)
     }

     return arr
   }
   console.log(flatten2(arr))

  </script>
</body>
</html>